package br.org.isvi.interpretador.portugol;

import br.org.isvi.interpretador.portugol.types.Kind;
import br.org.isvi.interpretador.portugol.types.Symbol;
import br.org.isvi.interpretador.portugol.types.Variable;

public interface Resolver {

	void escreva(Symbol valor);

	void escrevaNL(Symbol valor);

	Symbol leia(Kind k);
	
	void addToStack(Symbol obj);

	Symbol popStack();
	
	int stackSize();
	
	void declare(Variable obj);
	
	/**
	 * Retorna uma variavel.
	 * 
	 * @param name
	 * @return
	 */
	public Variable getVariable(String name);
	
	public Variable setVariable(Variable var, Symbol sym);
	
	/**
	 * Finaliza o processamento da opera��o, resolvendo-a.
	 */
	void endOPeration(OperationResolver opr);

	/**
	 * Atualiza a linha alvo, ilustra para o resolver qual a senten�a que esta sendo interpretada.
	 * @param target
	 */
	void updateTarget(String target);
	
	/**
	 * Retorna o resultado da ultima opera��o
	 * @return
	 */
	Symbol getOPerationResult();
	
	void performeHandlingError(String msg, int line, int col);
	
	void printStack();
}